package cn.six1943.deepchat.module.ai.service.model;

import java.util.*;
import jakarta.validation.*;
import cn.six1943.deepchat.module.ai.controller.admin.umodel.vo.*;
import cn.six1943.deepchat.module.ai.dal.dataobject.model.ProviderInstDO;
import cn.six1943.deepchat.module.ai.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.transaction.annotation.Transactional;

/**
 * 提供商 Service 接口
 *
 * @author at1943
 */
public interface ProviderInstService {

    /**
     * 创建提供商
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createProviderInst(@Valid AppProviderInstSaveReqVO createReqVO);

    @Transactional(rollbackFor = Exception.class)
    Long saveProviderInst(AppProviderInstUpdateReqVO saveReqVO);

    void verifyProviderInst(AppProviderInstUpdateReqVO saveReqVO);

    /**
     * 更新提供商
     *
     * @param updateReqVO 更新信息
     */
    void updateProviderInst(@Valid AppProviderInstSaveReqVO updateReqVO);

    void statusProviderInst(Long id, Integer status);

    /**
     * 删除提供商
     *
     * @param id 编号
     */
    void deleteProviderInst(Long id);

    /**
     * 获得提供商
     *
     * @param id 编号
     * @return 提供商
     */
    ProviderInstDO getProviderInst(Long id);

    ProviderInstDO getProviderInstByProviderId(Long providerId);

    /**
     * 获得提供商分页
     *
     * @param pageReqVO 分页查询
     * @return 提供商分页
     */
    PageResult<ProviderInstDO> getProviderInstPage(AppProviderInstPageReqVO pageReqVO);

    // ==================== 子表（模型） ====================

    List<ProviderInstDO> getProviderInstList(AppProviderInstPageReqVO pageReqVO);

    /**
     * 获得模型列表
     *
     * @param keyId api_key
     * @return 模型列表
     */
    List<ModelDO> getModelListByKeyId(Long keyId);

    Long createModel(AppModelSaveReqVO createReqVO);

    Long updateModel(AppModelSaveReqVO createReqVO);

    void deleteModel(Long id);

    void statusInstModel(Long id, Integer status);

    List<ModelDO> getModelList();
}